package co.com.pd.dao.impl;

import org.hibernate.Session;
import org.hibernate.Transaction;

import co.com.pd.dao.UsuarioDaoInt;
import co.com.pd.dao.cfg.HibernateSessionFactory;
import co.com.pd.dtos.UsuarioDto;

/**
 * 
 * @author Usuario Implementacion para manejo de la persistencia de usuario
 */
public class UsuarioDaoImpl implements UsuarioDaoInt {

	/**
	 * Guarda el usario para la clase usaurio.
	 */
	@Override
	public void guardar(UsuarioDto usuariodto) {

		Session session = null;
		Transaction tx = null;
		/**
		 * creacion de la logica para el manejo la persistencia de usuario por
		 * medio del dto UsiarioDto
		 */
		try {
			session = HibernateSessionFactory.getInstance().getSession();

			tx = session.beginTransaction();
			session.save(usuariodto);
			tx.commit();

			/**
			 * Menejo de las excepciones.
			 */
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null)
				session.close();
		}

	}

	/**
	 * Realizacionde de la logica para obtener una solo instacia de usuario por
	 * medio del id.
	 */
	@Override
	public UsuarioDto obtener(String idUsuario) {
		Session session = null;
		UsuarioDto usuarioDto = null;
		/**
		 * realizacion de la logica para obtener el usuario, se obtiene la
		 * session de factoty y se acede a la base de datos para obtener el
		 * usuario
		 */
		try {
			session = HibernateSessionFactory.getInstance().getSession();

			usuarioDto = (UsuarioDto) session.get(UsuarioDto.class, idUsuario);

			/**
			 * Manejo de excepciones
			 */
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null)
				session.close();
		}
		return usuarioDto;

	}

	/**
	 * realizacion de la logica para actualizar un usuario en la base de datos
	 */
	@Override
	public void actualizar(UsuarioDto usuariodto) {
		Session session = null;
		Transaction tx = null;
		/**
		 * creacion de la logica para alctualizar el usuario, ontencion del
		 * sessionFactory, y gurdado del Dto usuario en la base de datos
		 */
		try {
			session = HibernateSessionFactory.getInstance().getSession();

			tx = session.beginTransaction();
			session.update(usuariodto);
			tx.commit();

			/**
			 * manejo de las excepciones
			 */
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null)
				session.close();
		}

	}

	/**
	 * Realizacion de la logica para eliminar un usuario de la base de datos
	 */
	@Override
	public void elimnar(UsuarioDto usuariodto) {
		Session session = null;
		Transaction tx = null;
		/**
		 * Creacion de la logica para guardar el usuario, obtencion del
		 * sessionFactory y borrado del usuario
		 */
		try {
			session = HibernateSessionFactory.getInstance().getSession();

			tx = session.beginTransaction();
			session.delete(usuariodto);
			tx.commit();

			/**
			 * Manejo de excepciones.
			 */
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null)
				session.close();
		}

	}

}
